package gui.ciclo;

import java.awt.Color;
import java.awt.Font;
import java.awt.Rectangle;
import java.awt.SystemColor;
import java.text.DateFormat;
import java.util.Date;

import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextArea;
import javax.swing.border.TitledBorder;

import utils.Utilidad;

import modelo.ModeloCiclo;

import com.toedter.calendar.JCalendar;

import entidad.Ciclo;

public class PanelAgregarCiclo extends JPanel {

	private static final long serialVersionUID = 1L;
	private JLabel lblDescripcion = null;
	private JTextArea txtDescripcion = null;
	private JPanel panelCiclo = null;
	private JTextArea txtFechaInicio = null;
	private JLabel lblFechaInicio = null;
	private JLabel lblFechaTermino = null;
	private JTextArea txtFechaTermino = null;
	private JButton btnAceptar = null;
	private JButton btnCancelar = null;
	private JLabel lblEstatus = null;
	private ButtonGroup grupoBotones = null; // @jve:decl-index=0:
	private JRadioButton rbtnActivo = null;
	private JRadioButton rbtnInactivo = null;
	private JButton btnFechaInicio = null;
	private Date fechaInicio = null; // @jve:decl-index=0:
	private Date fechaTermino = null; // @jve:decl-index=0:
	private JButton btnFechaTermino = null;
	private Utilidad utilidad = null;  //  @jve:decl-index=0:
	private ModeloCiclo modelo = null;

	/**
	 * This is the default constructor
	 */
	public PanelAgregarCiclo() {
		super();
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.modelo = ModeloCiclo.getInstancia();
		grupoBotones = new ButtonGroup();
		this.fechaInicio = new Date();
		this.fechaTermino = new Date();
		lblDescripcion = new JLabel();
		lblDescripcion.setText("Descripcion:");
		lblDescripcion.setBounds(new Rectangle(10, 26, 74, 23));
		this.setSize(463, 392);
		this.setLayout(null);
		this.add(getPanelCiclo(), null);
		this.add(getBtnAceptar(), null);
		this.add(getBtnCancelar(), null);
		utilidad = Utilidad.getInstancia();
	}

	/**
	 * This method initializes txtDescripcion
	 * 
	 * @return javax.swing.JTextArea
	 */
	private JTextArea getTxtDescripcion() {
		if (txtDescripcion == null) {
			txtDescripcion = new JTextArea();
			txtDescripcion.setBorder(BorderFactory.createLineBorder(
					Color.black, 1));
			txtDescripcion.setBounds(new Rectangle(106, 26, 263, 109));
		}
		return txtDescripcion;
	}

	/**
	 * This method initializes panelCiclo
	 * 
	 * @return javax.swing.JPanel
	 */

	private JPanel getPanelCiclo() {
		if (panelCiclo == null) {
			lblEstatus = new JLabel();
			lblEstatus.setBounds(new Rectangle(9, 221, 92, 23));
			lblEstatus.setText("Estatus:");
			lblFechaTermino = new JLabel();
			lblFechaTermino.setBounds(new Rectangle(9, 187, 92, 23));
			lblFechaTermino.setText("Fecha Termino:");
			lblFechaInicio = new JLabel();
			lblFechaInicio.setBounds(new Rectangle(10, 151, 92, 23));
			lblFechaInicio.setText("Fecha Inicio:");
			panelCiclo = new JPanel();
			panelCiclo.setLayout(null);
			panelCiclo.setBounds(new Rectangle(12, 10, 432, 292));
			panelCiclo.setBorder(BorderFactory.createTitledBorder(BorderFactory
					.createLineBorder(SystemColor.activeCaptionText, 1),
					"Datos Ciclo", TitledBorder.DEFAULT_JUSTIFICATION,
					TitledBorder.DEFAULT_POSITION, new Font("Dialog",
							Font.BOLD, 12), SystemColor.activeCaptionText));
			panelCiclo.add(getTxtDescripcion(), null);
			panelCiclo.add(lblDescripcion, null);
			panelCiclo.add(getTxtFechaInicio(), null);
			panelCiclo.add(lblFechaInicio, null);
			panelCiclo.add(lblFechaTermino, null);
			panelCiclo.add(getTxtFechaTermino(), null);
			panelCiclo.add(lblEstatus, null);
			panelCiclo.add(getRbtnActivo(), null);
			panelCiclo.add(getRbtnInactivo(), null);
			panelCiclo.add(getBtnFechaInicio(), null);
			panelCiclo.add(getBtnFechaTermino(), null);
		}
		return panelCiclo;
	}

	/**
	 * This method initializes txtFechaInicio
	 * 
	 * @return javax.swing.JTextArea
	 */
	private JTextArea getTxtFechaInicio() {
		if (txtFechaInicio == null) {
			txtFechaInicio = new JTextArea();
			txtFechaInicio.setBorder(BorderFactory.createLineBorder(
					Color.black, 1));
			txtFechaInicio.setBounds(new Rectangle(106, 151, 132, 23));
			txtFechaInicio.setEnabled(false);
		}
		return txtFechaInicio;
	}

	/**
	 * This method initializes txtFechaTermino
	 * 
	 * @return javax.swing.JTextArea
	 */
	private JTextArea getTxtFechaTermino() {
		if (txtFechaTermino == null) {
			txtFechaTermino = new JTextArea();
			txtFechaTermino.setBounds(new Rectangle(106, 187, 132, 23));
			txtFechaTermino.setBorder(BorderFactory.createLineBorder(
					Color.black, 1));
			txtFechaTermino.setEnabled(false);
		}
		return txtFechaTermino;
	}

	/**
	 * This method initializes btnAceptar
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getBtnAceptar() {
		if (btnAceptar == null) {
			btnAceptar = new JButton();
			btnAceptar.setBounds(new Rectangle(101, 317, 117, 33));
			btnAceptar.setText("Aceptar");
			btnAceptar.setIcon(new ImageIcon("./lib/images/add.png"));
			btnAceptar.addActionListener(new java.awt.event.ActionListener() {
				@SuppressWarnings("deprecation")
				public void actionPerformed(java.awt.event.ActionEvent e) {
					if (utilidad.validar(txtDescripcion, txtFechaInicio,
							txtFechaTermino) == false
							|| rbtnActivo.isSelected() == false
							&& rbtnInactivo.isSelected() == false) {
						JOptionPane.showMessageDialog(null,
								"Faltan Campos por llenar");
					} else {
						String estatus = rbtnActivo.isSelected() ? "Activo"
								: "Inactivo";
						java.sql.Date dateInicio = new java.sql.Date(
								fechaInicio.getYear() + 1900 - 1900,
								fechaInicio.getMonth(), fechaInicio.getDate());
						java.sql.Date dateTermino = new java.sql.Date(
								fechaTermino.getYear() + 1900 - 1900,
								fechaTermino.getMonth(), fechaTermino.getDate());
						Ciclo ciclo = new Ciclo(0, txtDescripcion.getText(),
								dateInicio, dateTermino, estatus);
						ciclo = (Ciclo)utilidad.convertirAMayuscula(ciclo);
						modelo.agregar(ciclo);
						JOptionPane.showMessageDialog(null,
								"Ciclo Agregado con Exito");
						utilidad.limpiar(txtDescripcion, txtFechaInicio,
								txtFechaTermino, grupoBotones);
					}
				}
			});
		}
		return btnAceptar;
	}

	/**
	 * This method initializes btnCancelar
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getBtnCancelar() {
		if (btnCancelar == null) {
			btnCancelar = new JButton();
			btnCancelar.setBounds(new Rectangle(230, 317, 117, 32));
			btnCancelar.setText("Salir");
			btnCancelar.setIcon(new ImageIcon("./lib/images/salir.png"));
			btnCancelar.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					if (JOptionPane.showConfirmDialog(null,
							"Confirma que desea salir?", "Atencion",
							JOptionPane.OK_CANCEL_OPTION) == 0) {
					DialogoAgregarCiclo.getInstancia().dispose();
					}
				}
			});
		}
		return btnCancelar;
	}

	/**
	 * This method initializes rbtnActivo
	 * 
	 * @return javax.swing.JRadioButton
	 */
	private JRadioButton getRbtnActivo() {
		if (rbtnActivo == null) {
			rbtnActivo = new JRadioButton();
			rbtnActivo.setBounds(new Rectangle(110, 221, 71, 26));
			rbtnActivo.setText("Activo");
			grupoBotones.add(rbtnActivo);
		}
		return rbtnActivo;
	}

	/**
	 * This method initializes rbtnInactivo
	 * 
	 * @return javax.swing.JRadioButton
	 */
	private JRadioButton getRbtnInactivo() {
		if (rbtnInactivo == null) {
			rbtnInactivo = new JRadioButton();
			rbtnInactivo.setBounds(new Rectangle(190, 221, 71, 26));
			rbtnInactivo.setText("Inactivo");
			grupoBotones.add(rbtnInactivo);
		}
		return rbtnInactivo;
	}

	private Date seleccionarFechaInicioCiclo() {
		JCalendar calendar = new JCalendar();
		JDialog dialogo = new JDialog();
		dialogo.setTitle("Elija Fecha de Inicio del Ciclo");
		dialogo.setModal(true);
		dialogo.setContentPane(calendar);
		dialogo.setSize(300, 300);
		dialogo.setVisible(true);
		return (Date) calendar.getDate();

	}

	private Date seleccionarFechaTerminoCiclo() {
		JCalendar calendar = new JCalendar();
		JDialog dialogo = new JDialog();
		dialogo.setTitle("Elija Fecha de Termino del Ciclo");
		dialogo.setModal(true);
		dialogo.setContentPane(calendar);
		dialogo.setSize(300, 300);
		dialogo.setVisible(true);
		return (Date) calendar.getDate();

	}

	/**
	 * This method initializes btnFechaInicio
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getBtnFechaInicio() {
		if (btnFechaInicio == null) {
			btnFechaInicio = new JButton();
			btnFechaInicio.setBounds(new Rectangle(246, 151, 70, 23));
			btnFechaInicio.setText("Inicio");
			btnFechaInicio
					.addActionListener(new java.awt.event.ActionListener() {
						@SuppressWarnings("deprecation")
						public void actionPerformed(java.awt.event.ActionEvent e) {
							@SuppressWarnings("unused")
							DateFormat formatoFecha = DateFormat
									.getDateInstance();
							Date fecha = seleccionarFechaInicioCiclo();
							fechaInicio = fecha;

							txtFechaInicio
									.setText((fechaInicio.getYear() + 1900)
											+ "-"
											+ (fechaInicio.getMonth() + 1)
											+ "-" + fechaInicio.getDate());
						}
					});
		}
		return btnFechaInicio;
	}

	/**
	 * This method initializes btnFechaTermino
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getBtnFechaTermino() {
		if (btnFechaTermino == null) {
			btnFechaTermino = new JButton();
			btnFechaTermino.setBounds(new Rectangle(245, 188, 70, 22));
			btnFechaTermino.setText("Final");
			btnFechaTermino
					.addActionListener(new java.awt.event.ActionListener() {
						@SuppressWarnings("deprecation")
						public void actionPerformed(java.awt.event.ActionEvent e) {
							@SuppressWarnings("unused")
							DateFormat formatoFecha = DateFormat
									.getDateInstance();
							Date fecha = seleccionarFechaTerminoCiclo();
							fechaTermino = fecha;
							txtFechaTermino
									.setText((fechaTermino.getYear() + 1900)
											+ "-"
											+ (fechaTermino.getMonth() + 1)
											+ "-" + fechaTermino.getDate());

						}
					});
		}
		return btnFechaTermino;
	}

} // @jve:decl-index=0:visual-constraint="12,19"
